L’objectif de ce TP est d’apprendre à manipuler les séries temporelles sous R en utilisant les packages de bases. Dans R il existe de nombreux packages qui permettent de manipuler les séries temporelles. Pour n’en citer que quelques-uns :
- Les objetstspeuvent être créés à partir du packagestats;
- Les objetszoopeuvent être créés à partir du package zoo ;
- Les objetsxtspeuvent être créés à partir du package xts ;
- Les objetstispeuvent être créés à partir du package tseries ;
- Les objetstsibblepeuvent être créés à partir du package tsibble.
tsbox permet quand à lui de facilement passer d’une classe à l’autre.
Ici nous nous concentrerons essentiellement sur les trois premiers :
ts stocker les séries temporelles, zoo et
xts pour effectuer certaines manipulations
supplémentaires.
ts()La fonction ts() permet de créer des objets
séries-temporelles à partir un vecteur (ou une matrice). La syntaxe de
base est ts(vector, start=, end=, frequency=) où
start et end sont la première et la dernière
observation, frequency est le nombre d’observations par
unité de temps (1=annuelle, 2=semestrielle, 4=trimestrielle,
6=bi-mestrielle, 12=mensuelle, etc.).
Par exemple pour créer une série trimestrielle ayant les valeurs de 1 à 10 et commençant en 1959Q2 :
ts(1:10, frequency = 4, start = c(1959, 2)) # 2ème trimestre de 1959
## Qtr1 Qtr2 Qtr3 Qtr4
## 1959 1 2 3
## 1960 4 5 6 7
## 1961 8 9 10
# Équivalent à
ts(1:10, frequency = 4, start = 1959 + 1/4)
## Qtr1 Qtr2 Qtr3 Qtr4
## 1959 1 2 3
## 1960 4 5 6 7
## 1961 8 9 10
On peut aussi définir l’objet à partir de sa date de fin :
ts(1:10, frequency = 4, end = c(1959, 2))
## Qtr1 Qtr2 Qtr3 Qtr4
## 1957 1 2 3 4
## 1958 5 6 7 8
## 1959 9 10
Si l’on directement extraire un sous-ensemble de la série on peut
spécifier les paramètres end et start. Par
exemple pour ne garder que les valeurs jusqu’en 1960 inclus :
ts(1:10, frequency = 4, start = c(1959, 2), end = c(1960, 4))
## Qtr1 Qtr2 Qtr3 Qtr4
## 1959 1 2 3
## 1960 4 5 6 7
Ou alors utiliser la fonction window une fois l’objet
créé :
ts_object <- ts(1:10, frequency = 4, start = c(1959, 2))
window(ts_object, end = c(1960, 4))
## Qtr1 Qtr2 Qtr3 Qtr4
## 1959 1 2 3
## 1960 4 5 6 7
On peut récupérer les différents attributs avec les fonctions
start(), end() et frequency()
:
start(ts_object)
## [1] 1959 2
end(ts_object)
## [1] 1961 3
frequency(ts_object)
## [1] 4
Deux autres fonctions peuvent aussi être utiles : time()
crée un série-temporelle à partir des dates de notre série-temporelle et
cycle() donne la position dans le cycle de chaque
observation.
time(ts_object)
## Qtr1 Qtr2 Qtr3 Qtr4
## 1959 1959.25 1959.50 1959.75
## 1960 1960.00 1960.25 1960.50 1960.75
## 1961 1961.00 1961.25 1961.50
cycle(ts_object)
## Qtr1 Qtr2 Qtr3 Qtr4
## 1959 2 3 4
## 1960 1 2 3 4
## 1961 1 2 3
ts_object
ts_object[cycle(ts_object) == 2]
## [1] 1 5 9
indicatrice <- ts(0, start = 2000, end = 2020, frequency = 12)
window(indicatrice, start = c(2005, 4), end = c(2005, 4)) <- 1
indicatrice
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2000 0 0 0 0 0 0 0 0 0 0 0 0
## 2001 0 0 0 0 0 0 0 0 0 0 0 0
## 2002 0 0 0 0 0 0 0 0 0 0 0 0
## 2003 0 0 0 0 0 0 0 0 0 0 0 0
## 2004 0 0 0 0 0 0 0 0 0 0 0 0
## 2005 0 0 0 1 0 0 0 0 0 0 0 0
## 2006 0 0 0 0 0 0 0 0 0 0 0 0
## 2007 0 0 0 0 0 0 0 0 0 0 0 0
## 2008 0 0 0 0 0 0 0 0 0 0 0 0
## 2009 0 0 0 0 0 0 0 0 0 0 0 0
## 2010 0 0 0 0 0 0 0 0 0 0 0 0
## 2011 0 0 0 0 0 0 0 0 0 0 0 0
## 2012 0 0 0 0 0 0 0 0 0 0 0 0
## 2013 0 0 0 0 0 0 0 0 0 0 0 0
## 2014 0 0 0 0 0 0 0 0 0 0 0 0
## 2015 0 0 0 0 0 0 0 0 0 0 0 0
## 2016 0 0 0 0 0 0 0 0 0 0 0 0
## 2017 0 0 0 0 0 0 0 0 0 0 0 0
## 2018 0 0 0 0 0 0 0 0 0 0 0 0
## 2019 0 0 0 0 0 0 0 0 0 0 0 0
## 2020 0
Pour tracer un graphique il suffit maintenant d’utiliser les
fonctions plot() et lines()
plot(ts_object * 2)
lines(ts_object, col = "red")
De la même façon que précédemment on peut créer une série temporelle
multivariée. Cette fois-ci l’objet créé est à la fois mts,
ts et matrix
mts <- ts(matrix(rnorm(300), 100, 3), start = c(1961, 1), frequency = 12)
On peut accéder à la première variable de la même façon que dans une matrice : par son nom ou son numéro de colonne :
colnames(mts)
## [1] "Series 1" "Series 2" "Series 3"
# mts[,1] # ou de façon équivalente :
mts[, "Series 1"]
## Jan Feb Mar Apr May
## 1961 0.846216755 -1.480607810 0.712875544 0.565354193 -1.171130785
## 1962 -1.394459073 -0.360391859 -0.439644349 1.261949785 0.052608224
## 1963 1.444737944 0.715983526 0.400614751 -1.334375995 -1.314527761
## 1964 -0.722615626 0.535303147 0.336194368 0.013404389 -1.112654884
## 1965 -1.211981498 0.168554737 -1.785536453 -0.153429609 -0.657576879
## 1966 -1.384629768 -0.306981187 -3.440578343 0.749604759 -0.479126395
## 1967 1.702241167 1.188876814 -0.257592662 0.560098112 0.358571748
## 1968 -0.745072847 1.612171437 -0.741861282 1.839704095 -0.006827505
## 1969 -2.031490125 -0.680613282 0.189019916 -0.125269228
## Jun Jul Aug Sep Oct
## 1961 1.117809253 -1.578858855 -0.347795932 1.341049187 0.009753730
## 1962 0.793259359 -1.591047771 -1.095072922 -0.237697955 -0.628501284
## 1963 -1.887287954 2.813310391 0.055846272 1.132483282 1.761797069
## 1964 0.352232615 -0.361554650 -0.453462494 0.737519603 -1.250656949
## 1965 -0.584180061 0.101071186 1.013979664 0.568759249 0.452724609
## 1966 -0.188186599 1.381206748 0.854482504 -1.895478718 -1.591001643
## 1967 -3.531295876 -0.320459831 -1.782189099 1.072774142 -0.920641883
## 1968 -0.560599222 0.801547349 3.507490608 0.258134047 -1.013471687
## 1969
## Nov Dec
## 1961 1.048714530 0.794888201
## 1962 -0.132312288 -0.359361054
## 1963 0.958649708 -0.406580504
## 1964 -0.973023495 0.518460208
## 1965 1.305444918 -1.485204878
## 1966 0.628010727 -0.432480412
## 1967 1.363721608 -0.395993531
## 1968 -0.122183387 0.087360459
## 1969
Et avec les même fonctions que pour les matrices on peut récupérer
les noms des colonnes (colnames), le nombre de variables
(ncol), etc.
colnames(ts_object) renverra toujours l’objet
NULL. Une solution est de tester si l’objet est multivarié
avec la fonction is.mts().
Pour concaténer plusieurs séries temporelles, les fonctions deux
fonctions suivantes peuvent ts.union() et
ts.intersect().
ts_object2 <- ts(1:10, frequency = 4, start = c(1960, 1))
ts.union(ts_object, ts_object2) # on garde toute la couverture temporelle en rajoutant des NA
## ts_object ts_object2
## 1959 Q2 1 NA
## 1959 Q3 2 NA
## 1959 Q4 3 NA
## 1960 Q1 4 1
## 1960 Q2 5 2
## 1960 Q3 6 3
## 1960 Q4 7 4
## 1961 Q1 8 5
## 1961 Q2 9 6
## 1961 Q3 10 7
## 1961 Q4 NA 8
## 1962 Q1 NA 9
## 1962 Q2 NA 10
ts.intersect(ts_object, ts_object2) # on ne garde que les périodes communes
## ts_object ts_object2
## 1960 Q1 4 1
## 1960 Q2 5 2
## 1960 Q3 6 3
## 1960 Q4 7 4
## 1961 Q1 8 5
## 1961 Q2 9 6
## 1961 Q3 10 7
On va maintenant utiliser la série d’indice de production industrielle de la France (CVS-CJO) :
ipi_fr_manuf <- ts(c(94.2, 96.69, 95.66, 95.06, 95.96, 93.97, 94.16, 93.4,
94.12, 94.29, 92.42, 93.01, 94.98, 93.31, 93.76, 93.06, 91.93,
93.41, 91.68, 92.98, 93.42, 92.39, 93.74, 92.69, 93.12, 92.57,
93.49, 92.59, 92.85, 91.74, 91.23, 91.53, 90.08, 90.47, 89.97,
88.44, 88.66, 87.86, 87.38, 87.42, 87.14, 86.24, 87.67, 86.86,
87.2, 87.68, 85.93, 86.25, 88.14, 87.71, 88.21, 89.59, 90.38,
90.76, 91.67, 92.18, 91.79, 93.02, 94.54, 94.04, 94.17, 94.56,
93.94, 94.29, 93.59, 94.34, 94.79, 94.04, 94.62, 93.51, 92.59,
94.9, 93.89, 93.19, 94.19, 93.67, 95.19, 94.72, 92.82, 95.49,
95.13, 94.21, 95.42, 95.34, 94.39, 96.09, 97.14, 100.02, 97.84,
98.59, 98.72, 102.9, 100.51, 103.23, 100.91, 103.1, 103.21, 103.76,
102.15, 103.37, 104.98, 104.21, 105.32, 102.65, 104.34, 104.07,
104.39, 103.62, 104.75, 103.36, 103.8, 104.89, 105.49, 106.69,
106.91, 104.6, 107.76, 109.36, 109.26, 108.33, 109.12, 109.6,
110.2, 110.81, 112.57, 110.92, 112.15, 110.86, 111.53, 112.75,
112.67, 114.3, 113.32, 114.09, 114.65, 112.12, 113.06, 113.27,
111.34, 114.36, 111.94, 112.04, 109.81, 110.12, 110.98, 111.91,
112.23, 112.86, 111.23, 111.13, 109.96, 112.59, 110.62, 109.69,
111.26, 108.05, 110.05, 110.39, 110.92, 110.7, 107.72, 107.26,
109.22, 108.78, 108.66, 110.62, 108.8, 109.42, 110.12, 111.6,
110.61, 111, 110.22, 111.69, 112.3, 107.68, 111.92, 112.66, 110.38,
110.74, 113.16, 111.04, 108.72, 112, 110.35, 110.3, 110.21, 109.04,
112.63, 109.26, 113.55, 112.07, 111.16, 110.64, 112.98, 111.54,
114.46, 114.28, 112.29, 111.52, 113.52, 112.84, 112.1, 114.24,
113.24, 114.18, 114.73, 113.28, 115.9, 114.88, 115.04, 115.72,
112.57, 115.17, 113.71, 113.82, 115.29, 116.48, 114.36, 116.12,
111.24, 110.64, 111.49, 109.8, 109.25, 107.21, 100.8, 99.34,
94.87, 93.66, 92.19, 92.2, 93.49, 95.23, 94.71, 96.27, 97.09,
96.3, 97.66, 96.56, 97.12, 96.6, 98.78, 98.7, 99.27, 99.03, 99.69,
98.63, 99.98, 99.7, 100.82, 101.79, 104.09, 105.03, 103.59, 102.21,
105.56, 101.55, 103.08, 101.93, 101.22, 101.5, 104.35, 102.1,
101.05, 100.14, 101.87, 100.16, 99.79, 99.16, 100.01, 101.92,
100.11, 97.66, 97.59, 99.12, 98.02, 98.55, 98.78, 100.31, 100.31,
99.64, 98.56, 98.37, 98.54, 99.16, 100.35, 99.27, 98.24, 99.95,
99.43, 99.53, 96.53, 99.06, 100.11, 98.2, 99.17, 97.91, 96.93,
99.45, 99.02, 99.38, 99.74, 99.38, 100.85, 100.02, 98.66, 100.22,
101.23, 100.64, 99.94, 100.92, 102.39, 100.8, 99.54, 100.73,
99.76, 99.07, 99.77, 101.63, 100.4, 99.4, 102.76, 100.97, 100.16,
101.11, 102.62, 101.82, 103.7, 103.02, 103.59, 103.54, 104.38,
105.57, 105.52, 105.93, 103.59, 102.87, 103.82, 103.83, 102.5,
104.23, 104.04, 104.61, 103.38, 104.22, 103.42, 103.7, 104.93,
105.75, 104.38, 104.29, 105.98, 103.72, 104.07, 103.1, 103.88,
104.37), start = 1990, frequency = 12)
Pour calculer la série retardée/avancée, il suffit d’utiliser la
fonction lag() :
lag(ipi_fr_manuf, k = -1) # série retardée d'un mois : en février 2010 on a la valeur de janvier 2010
La fonction diff permet de calculer la différence entre
deux périodes
diff(ipi_fr_manuf, k = 1)
ev() qui calcule l’évolution mensuelle
si la série en entrée est mensuelle, l’évolution trimestrielle si la
série en entrée est trimestrielle, etc.
ev <- function(x){
result <- (x/lag(x, k = -1) - 1) * 100
return(result)
}
# Ou de manière équivalente :
ev2 <- function(x){
# Attention ici c'est bien k = 1 dans la fonction diff
# et k = -1 dans la fonction lag
result <- (diff(x, k = 1) /lag(x, k = -1)) * 100
return(result)
}
#################################################
# Remarque : pour des raisons informatiques ces deux fonctions ne donnent pas exactement le même résultat.
# C'est un problème récurrent lorsque l'on souhaite tester l'équalité entre deux séries temporelles :
all (ev(ipi_fr_manuf) == ev2(ipi_fr_manuf))
## [1] FALSE
# Une solution est plutôt d'utiliser la fonction all.equal():
isTRUE(all.equal(ev(ipi_fr_manuf), ev2(ipi_fr_manuf)))
## [1] TRUE
xts et zooxtsUn des avantages du package xts est qu’il permet
d’appliquer une fonction à chaque période d’une série temporelle (par
exemple à toutes les données trimestrielles, annuelles, etc.). Il s’agit
des fonctions apply.monthly(),
apply.quarterly(), apply.yearly(), etc. Pour
cela il faut auparavant convertir les données au format
xts.
Par exemple pour calculer la moyenne annuelle :
library(xts)
moy_an <- apply.yearly(as.xts(ipi_fr_manuf), mean)
moy_an
## [,1]
## déc 1990 94.41167
## déc 1991 93.11250
## déc 1992 91.50667
## déc 1993 87.19083
## déc 1994 91.00250
## déc 1995 94.11167
## déc 1996 94.43833
## déc 1997 99.45333
## déc 1998 103.83917
## déc 1999 106.26667
## déc 2000 111.45667
## déc 2001 112.51000
## déc 2002 111.04250
## déc 2003 109.37833
## déc 2004 110.91000
## déc 2005 111.02750
## déc 2006 112.63083
## déc 2007 114.35333
## déc 2008 110.16833
## déc 2009 95.01917
## déc 2010 99.17583
## déc 2011 103.01750
## déc 2012 99.88167
## déc 2013 99.15500
## déc 2014 98.70917
## déc 2015 100.00000
## déc 2016 100.60167
## déc 2017 103.41333
## déc 2018 103.68417
## oct 2019 104.44700
ipi_fr_manuf.
# Tout d'abord on prolonge l'IPI par des valeurs manquantes jusqu'à la fin de l'année,
# sinon la dernière somme sur le trimestre est fausse.
ipi_fr_manuf_prolonge <- window(ipi_fr_manuf, end = c(2019, 12), extend = TRUE)
somme_trim <- apply.quarterly(as.xts(ipi_fr_manuf_prolonge), sum)
# Attention la fonction lag n'agit pas pareil pour les objets xts et ts :
# il faut ici utiliser l'option k = 1
evol_trim <- (somme_trim/lag(somme_trim, k = 1) - 1) * 100
# On peut utiliser la fonction format() si l'on veut convertir automatiquement en un objet ts
start_year <- as.numeric(format(start(evol_trim), "%Y"))
start_quarter <- as.numeric(substr(quarters(start(evol_trim)), 2, 2))
ts(evol_trim, start = c(start_year, start_quarter), frequency = 4)
## Qtr1 Qtr2 Qtr3 Qtr4
## 1990 NA -0.54440761 -1.16144426 -0.69582505
## 1991 0.83297583 -1.29409679 -0.11494253 0.26611047
## 1992 0.12911556 -0.71638370 -1.56576954 -1.45140009
## 1993 -1.85212734 -1.17468738 0.35659509 -0.71447675
## 1994 1.61625491 2.52594107 1.81361504 2.16224060
## 1995 0.37997159 -0.15919624 0.43583020 -0.86434997
## 1996 0.09608541 0.82127493 -0.04936878 0.53979678
## 1997 0.92992245 3.07002295 1.91600607 1.69132493
## 1998 0.61189949 1.11283644 -0.07998464 -0.07364478
## 1999 -0.05447321 1.65432336 0.69385309 2.40548752
## 2000 0.60253861 1.63565609 0.07179180 1.54839481
## 2001 0.68880254 -1.05537040 -0.23932634 -1.67930340
## 2002 0.94888092 0.02984006 -0.61153869 -1.25161329
## 2003 0.71732523 -1.71414775 0.30090887 0.66736056
## 2004 1.06130641 0.17452532 -0.30338530 0.56643567
## 2005 -0.25765474 -0.08110056 -0.23147452 0.90394118
## 2006 -0.02986144 1.64286994 -0.86693311 0.54842439
## 2007 0.87564125 0.55823469 -0.21217230 -0.18349693
## 2008 1.00087540 -2.34882847 -2.20710059 -7.01579234
## 2009 -8.66438913 0.07124537 2.54520860 0.85048773
## 2010 0.68153656 1.53846154 0.43771044 1.34428428
## 2011 3.44017730 -1.08407150 -0.99896547 0.56166933
## 2012 -1.58792012 -1.30337227 0.97957273 -2.53939876
## 2013 0.33291436 1.66243440 -1.59528409 1.12024909
## 2014 -0.38824553 -0.83999731 0.79967471 -1.07234100
## 2015 1.30823338 0.70772120 -0.04662781 0.46316351
## 2016 0.40796020 -1.04713771 0.74776339 0.44068920
## 2017 0.25071751 1.53015894 0.96259804 1.76880357
## 2018 -2.12604883 0.09024107 0.47333849 -0.22113258
## 2019 1.19483523 -0.33961785 -0.93633555 NA
zooLe package zoo donne un ensemble d’outils qui permettent
de manipuler les séries-temporelles. De nombreux packages (dont
xts) sont d’ailleurs basés sur ce format. Il permet
notamment de faire des imputations de données manquantes selon
différentes fonctions (toutes les fonctions commençant par
na.) et de mieux gérer le format des dates associées aux
séries temporelles (ce qui permet de faire des manipulations avec la
fonction format, ce qui permet par exemple plus facilement
exporter des séries temporelles sous Excel). Le calcul de l’évolution
trimestrielle aurait par exemple pu être faite avec ce package :
somme_trim <- aggregate(as.zoo(ipi_fr_manuf_prolonge), yearqtr, sum)
somme_trim <- as.ts(somme_trim) #La conversion en ts est plus simple depuis un objet zoo
evol_trim <- ev(somme_trim)
evol_trim
## Qtr1 Qtr2 Qtr3 Qtr4
## 1990 -0.54440761 -1.16144426 -0.69582505
## 1991 0.83297583 -1.29409679 -0.11494253 0.26611047
## 1992 0.12911556 -0.71638370 -1.56576954 -1.45140009
## 1993 -1.85212734 -1.17468738 0.35659509 -0.71447675
## 1994 1.61625491 2.52594107 1.81361504 2.16224060
## 1995 0.37997159 -0.15919624 0.43583020 -0.86434997
## 1996 0.09608541 0.82127493 -0.04936878 0.53979678
## 1997 0.92992245 3.07002295 1.91600607 1.69132493
## 1998 0.61189949 1.11283644 -0.07998464 -0.07364478
## 1999 -0.05447321 1.65432336 0.69385309 2.40548752
## 2000 0.60253861 1.63565609 0.07179180 1.54839481
## 2001 0.68880254 -1.05537040 -0.23932634 -1.67930340
## 2002 0.94888092 0.02984006 -0.61153869 -1.25161329
## 2003 0.71732523 -1.71414775 0.30090887 0.66736056
## 2004 1.06130641 0.17452532 -0.30338530 0.56643567
## 2005 -0.25765474 -0.08110056 -0.23147452 0.90394118
## 2006 -0.02986144 1.64286994 -0.86693311 0.54842439
## 2007 0.87564125 0.55823469 -0.21217230 -0.18349693
## 2008 1.00087540 -2.34882847 -2.20710059 -7.01579234
## 2009 -8.66438913 0.07124537 2.54520860 0.85048773
## 2010 0.68153656 1.53846154 0.43771044 1.34428428
## 2011 3.44017730 -1.08407150 -0.99896547 0.56166933
## 2012 -1.58792012 -1.30337227 0.97957273 -2.53939876
## 2013 0.33291436 1.66243440 -1.59528409 1.12024909
## 2014 -0.38824553 -0.83999731 0.79967471 -1.07234100
## 2015 1.30823338 0.70772120 -0.04662781 0.46316351
## 2016 0.40796020 -1.04713771 0.74776339 0.44068920
## 2017 0.25071751 1.53015894 0.96259804 1.76880357
## 2018 -2.12604883 0.09024107 0.47333849 -0.22113258
## 2019 1.19483523 -0.33961785 -0.93633555 NA
Pour le prochain exercice, utiliser la série suivante :
serie_avec_NA <- ts(c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA), start= 2000, frequency = 12)
serie_avec_NA, utiliser les différentes
fonctions du package zoo pour : 1. Enlever les valeurs
manquantes au début de la série ; 2. Remplacer les valeurs manquantes à
la fin de la série par la dernière valeur observée. 3. Interpoler de
manière linéaire les valeurs manquantes entre les 0 et les 1.
na.trim(),
na.locf et na.approx()
# D'abord on enlève les valeurs manquandes au début de la série
etape_1 <- na.trim(serie_avec_NA, sides = "left")
etape_1
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2001 0 0 0 0 0 0 0 0 0 0 0 0
## 2002 0 0 0 0 0 0 0 0 0 0 0 0
## 2003 NA NA NA NA NA NA NA NA NA NA NA NA
## 2004 NA NA NA NA NA NA NA NA NA NA NA NA
## 2005 1 1 1 1 1 1 1 1 1 1 1 1
## 2006 1 1 1 1 1 1 1 1 1 1 1 1
## 2007 NA NA NA NA NA NA NA NA NA NA NA NA
# Ensuite on interpole
etape_2 <- na.approx(etape_1, na.rm = FALSE)
etape_2
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2001 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
## 2002 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
## 2003 0.04 0.08 0.12 0.16 0.20 0.24 0.28 0.32 0.36 0.40 0.44 0.48
## 2004 0.52 0.56 0.60 0.64 0.68 0.72 0.76 0.80 0.84 0.88 0.92 0.96
## 2005 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
## 2006 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
## 2007 NA NA NA NA NA NA NA NA NA NA NA NA
# Enfin on remplace les valeurs à la fin de la série
etape_3 <- na.locf(etape_2)
etape_3
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2001 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
## 2002 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
## 2003 0.04 0.08 0.12 0.16 0.20 0.24 0.28 0.32 0.36 0.40 0.44 0.48
## 2004 0.52 0.56 0.60 0.64 0.68 0.72 0.76 0.80 0.84 0.88 0.92 0.96
## 2005 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
## 2006 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
## 2007 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
as.yearmon() et
format(), créer un data.frame contenant une colonne “date”
qui contient les dates au format JJ/MM/YYYY et une deuxième colonnes
avec les valeurs de ipi_fr_manuf.
as.yearmon() doit être appliquée sur
time(ipi_fr_manuf). Pour la fonction format
regarder l’aide ?format.Date.
dates <- as.yearmon(time(ipi_fr_manuf))
dates <- format(dates, "%d/%m/%Y")
donnees_formatees <- data.frame(date = dates, ipi = ipi_fr_manuf)
head(donnees_formatees)
## date ipi
## 1 01/01/1990 94.20
## 2 01/02/1990 96.69
## 3 01/03/1990 95.66
## 4 01/04/1990 95.06
## 5 01/05/1990 95.96
## 6 01/06/1990 93.97